Fontes de recursos no financiamento imobiliário¶

Sistema Brasileiro de Poupança e Empréstimo¶

Estoque em bilhões de R$

In [ ]:
import pandas as pd
# Ler o arquivo CSV referente ao SBPE com ponto e vírgula como delimitador
sbpe = pd.read_csv('sbpe.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
sbpe.set_index('DateTime', inplace=True, drop=True)

Títulos¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Títulos com ponto e vírgula como delimitador
titulos = pd.read_csv('titulos.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
titulos.set_index('DateTime', inplace=True, drop=True)

Recursos¶

In [ ]:
# Merge dos DataFrames sbpe e titulos
recursos = pd.merge(sbpe, titulos, how='inner', on='DateTime')
# Converter indice para datetime
recursos.index = pd.to_datetime(recursos.index)
# Converter colunas para float
recursos = recursos.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(recursos.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   SBPE    109 non-null    float64
 1   LCI     109 non-null    float64
 2   CRI     109 non-null    float64
 3   LIG     54 non-null     float64
 4   LH      102 non-null    float64
dtypes: float64(5)
memory usage: 5.1 KB
None
In [ ]:
# Imprime as primeiras linhas do DataFrame
print(recursos.head())
                  SBPE         LCI        CRI  LIG        LH
DateTime                                                    
2014-04-30  480.464917  114.102520  41.097931  NaN  1.304882
2014-05-31  485.037160  117.295887  40.795547  NaN  1.366089
2014-06-30  490.241090  119.665808  41.789186  NaN  1.413620
2014-07-31  495.725874  123.616931  42.046400  NaN  1.494045
2014-08-31  499.480830  127.289442  44.153062  NaN  1.457436
In [ ]:
# Imprime as últimas linhas do DataFrame
print(recursos.tail())
                  SBPE         LCI         CRI        LIG        LH
DateTime                                                           
2022-12-31  763.815067  238.693857  149.503759  88.571039  0.419768
2023-01-31  742.330203  248.385659  146.949612  90.985688  0.604349
2023-02-28  739.139471  259.435344  147.917429  93.199152  0.599259
2023-03-31  737.677102  275.533657  150.436542  95.317432  0.842265
2023-04-30  737.381942  284.425993  151.744832  97.786173  1.011370
In [ ]:
recursos.describe()
Out[ ]:
SBPE LCI CRI LIG LH
count 109.000000 109.000000 109.000000 54.000000 102.000000
mean 622.113425 164.422881 79.217958 34.803963 0.958290
std 114.726873 34.003273 25.957792 29.890667 0.351409
min 480.464917 114.102520 40.795547 0.177202 0.018120
25% 510.620427 137.750671 65.419271 11.308063 0.925513
50% 599.508867 165.544869 73.005338 21.926618 1.061776
75% 757.535898 183.879294 81.616554 56.932670 1.116405
max 801.437986 284.425993 151.744832 97.786173 1.494045
In [ ]:
def calcula_estat(column):
    return pd.Series({  
        'Média': column.mean(),
        'Mediana': column.median(),
        'Moda': column.mode()[0] if not column.mode().empty else None,
        'Desvio Padrão (populacional)': column.std(ddof=0),
        'Desvio Padrão (amostral)': column.std(),
        'Variância (populacional)': column.var(ddof=0),
        'Variância (amostral)': column.var(),
        'Coeficiente de Variação': (column.std() / column.mean()) * 100 if column.mean() != 0 else 0
    })

estatisticas_recursos = recursos.select_dtypes(include=['float64']).apply(calcula_estat)
estatisticas_recursos
Out[ ]:
SBPE LCI CRI LIG LH
Média 622.113425 164.422881 79.217958 34.803963 0.958290
Mediana 599.508867 165.544869 73.005338 21.926618 1.061776
Moda 480.464917 114.102520 40.795547 0.177202 0.018120
Desvio Padrão (populacional) 114.199390 33.846935 25.838445 29.612609 0.349682
Desvio Padrão (amostral) 114.726873 34.003273 25.957792 29.890667 0.351409
Variância (populacional) 13041.500676 1145.615013 667.625231 876.906583 0.122277
Variância (amostral) 13162.255312 1156.222560 673.806946 893.451991 0.123488
Coeficiente de Variação 18.441472 20.680378 32.767560 85.882941 36.670371
In [ ]:
import matplotlib.pyplot as plt

siglas = ["Sistema Brasileiro de Poupança e Empréstimo",
          "Letra de Crédito Imobiliário", 
          "Certificados de Recebíveis Imobiliários", 
          "Letra Imobiliária Garantida", 
          "Letras Hipotecárias"]

fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(recursos.columns):
    recursos.boxplot(column=column, ax=axes[i], grid=False)
    
    # Defina as siglas como título de cada boxplot
    axes[i].set_title(siglas[i], fontsize=11)

# Adiciona título geral
fig.suptitle('SBPE e Títulos\n', fontsize=16, fontweight='bold')

plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
import seaborn as sns
correlacao = sns.heatmap(recursos.corr(), annot=True, cmap='Purples')
No description has been provided for this image
In [ ]:
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))

# Iterar pelas colunas e plotar cada uma separadamente
for coluna in recursos.columns:
    plt.plot(recursos.index, recursos[coluna], marker='o', linestyle='-', label=coluna)

plt.title('Tendência Temporal dos Recursos')
plt.xlabel('Data', fontsize=14)
plt.ylabel('Recursos em Bilhões (R$)', fontsize='14')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))  # Adicionar uma legenda para as séries
plt.show()
No description has been provided for this image

Direcionamento¶

Aplicações em créditos imobiliários de parte dos recursos de caderneta de poupança e depósitos à vista captados pelas instituições financeiras

Aplicação¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_aplicacao = pd.read_csv('direcionamento_aplicacao.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
direcionamento_aplicacao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_aplicacao.rename(columns={'Imobiliário': 'Direcionamento_Aplicacao'}, inplace=True)

Aquisição¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_aquisicao = pd.read_csv('direcionamento_aquisicao.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
direcionamento_aquisicao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_aquisicao.rename(columns={'Imobiliário': 'Direcionamento_Aquisicao'}, inplace=True)

Construção¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_construcao = pd.read_csv('direcionamento_construcao.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
direcionamento_construcao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_construcao.rename(columns={'Imobiliário': 'Direcionamento_Construcao'}, inplace=True)

Reforma ou Aplicação¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_reforma_ampliacao = pd.read_csv('direcionamento_reforma_ampliacao.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
direcionamento_reforma_ampliacao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_reforma_ampliacao.rename(columns={'Imobiliário': 'Direcionamento_Reforma_Ampliacao'}, inplace=True)

Direcionamento¶

In [ ]:
# Concatenar os DataFrames 
direcionamento = pd.concat([direcionamento_aplicacao, direcionamento_aquisicao, direcionamento_construcao, direcionamento_reforma_ampliacao], axis=1)
# Remover as duas últimas linhas
direcionamento = direcionamento.iloc[:-2]
# Converter indice para datetime
direcionamento.index = pd.to_datetime(direcionamento.index)
# Converter colunas para float
direcionamento = direcionamento.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame   
print(direcionamento.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30
Data columns (total 4 columns):
 #   Column                            Non-Null Count  Dtype  
---  ------                            --------------  -----  
 0   Direcionamento_Aplicacao          109 non-null    float64
 1   Direcionamento_Aquisicao          109 non-null    float64
 2   Direcionamento_Construcao         109 non-null    float64
 3   Direcionamento_Reforma_Ampliacao  52 non-null     float64
dtypes: float64(4)
memory usage: 4.3 KB
None
In [ ]:
# Imprime as primeiras linhas do DataFrame
print(direcionamento.head())
            Direcionamento_Aplicacao  Direcionamento_Aquisicao  \
DateTime                                                         
2014-04-30                325.585144                270.757417   
2014-05-31                331.349084                278.111884   
2014-06-30                335.319843                284.820495   
2014-07-31                340.292474                291.964138   
2014-08-31                343.962417                298.685639   

            Direcionamento_Construcao  Direcionamento_Reforma_Ampliacao  
DateTime                                                                 
2014-04-30                  19.255190                               NaN  
2014-05-31                  19.592862                               NaN  
2014-06-30                  19.925202                               NaN  
2014-07-31                  20.317443                               NaN  
2014-08-31                  20.702543                               NaN  
In [ ]:
# Imprime as últimas linhas do DataFrame
print(direcionamento.tail())
            Direcionamento_Aplicacao  Direcionamento_Aquisicao  \
DateTime                                                         
2022-12-31                592.956933                851.185827   
2023-01-31                587.325492                857.959501   
2023-02-28                581.305567                863.790442   
2023-03-31                573.385644                871.826639   
2023-04-30                568.977065                876.639352   

            Direcionamento_Construcao  Direcionamento_Reforma_Ampliacao  
DateTime                                                                 
2022-12-31                  78.964214                        580.793643  
2023-01-31                  80.003929                        594.587095  
2023-02-28                  80.929094                        595.874873  
2023-03-31                  82.041950                        600.017655  
2023-04-30                  82.898815                        603.099518  
In [ ]:
direcionamento.describe()
Out[ ]:
Direcionamento_Aplicacao Direcionamento_Aquisicao Direcionamento_Construcao Direcionamento_Reforma_Ampliacao
count 109.000000 109.000000 109.000000 52.000000
mean 464.025662 533.736825 42.947682 564.759796
std 81.798012 168.306809 17.347505 41.636823
min 325.585144 270.757417 19.255190 512.119403
25% 387.192224 393.501215 29.165905 528.116359
50% 452.574064 485.512991 36.337262 555.566737
75% 516.834464 652.302756 53.741841 600.540329
max 618.514193 876.639352 82.898815 645.239690
In [ ]:
categorias = ['Aplicação', 'Aquisição', 'Construção', 'Reforma/Ampliação']

estatisticas_direcionamento = direcionamento.select_dtypes(include=['float64']).apply(calcula_estat)
estatisticas_direcionamento.columns = categorias

print(estatisticas_direcionamento)
                                Aplicação     Aquisição  Construção  \
Média                          464.025662    533.736825   42.947682   
Mediana                        452.574064    485.512991   36.337262   
Moda                           325.585144    270.757417   19.255190   
Desvio Padrão (populacional)    81.421927    167.532981   17.267746   
Desvio Padrão (amostral)        81.798012    168.306809   17.347505   
Variância (populacional)      6629.530150  28067.299692  298.175066   
Variância (amostral)          6690.914689  28327.182097  300.935946   
Coeficiente de Variação         17.627907     31.533670   40.392181   

                              Reforma/Ampliação  
Média                                564.759796  
Mediana                              555.566737  
Moda                                 512.119403  
Desvio Padrão (populacional)          41.234525  
Desvio Padrão (amostral)              41.636823  
Variância (populacional)            1700.286065  
Variância (amostral)                1733.625008  
Coeficiente de Variação                7.372483  
In [ ]:
import matplotlib.pyplot as plt

categorias = ["Aplicação", "Aquisição", "Construção", "Reforma ou Ampliação"]

fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(direcionamento.columns):
    direcionamento.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=12)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=12)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione título geral
fig.suptitle('Direcionamento do Crédito Imobiliário\n', fontsize=16, fontweight='bold')

plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
categorias = ["Aplicação", "Aquisição", "Construção", "Reforma ou Ampliação"]

# Gerar a matriz de correlação e o gráfico de calor
correlacao = sns.heatmap(direcionamento.corr(), annot=True, cmap='Purples')

# Definir os rótulos dos eixos x e y usando as categorias
correlacao.set_xticklabels(categorias, rotation=45)
correlacao.set_yticklabels(categorias, rotation=0)

plt.show()
No description has been provided for this image
In [ ]:
import matplotlib.pyplot as plt

categorias = ["Aplicação", "Aquisição", "Construção", "Reforma ou Ampliação"]

plt.figure(figsize=(12, 6))

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(direcionamento.columns):
    plt.plot(direcionamento.index, direcionamento[coluna], marker='o', linestyle='-', label=categorias[i])

plt.title('Tendência Temporal dos Direcionamentos', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Direcionamento em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75), title='Categorias')  # Adicionar uma legenda para as séries com título
plt.show()
No description has been provided for this image

Contábil¶

Operações de crédito destinadas à construção, reforma, ampliação e aquisição de unidades residenciais e comerciais

Financiamentos¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV com ponto e vírgula como delimitador
financiamentos = pd.read_csv('financiamentos.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
financiamentos.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
financiamentos.columns = ['Financiamento_'+str(col) for col in financiamentos.columns]

BNDU¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV com ponto e vírgula como delimitador
bndu = pd.read_csv('bndu.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
bndu.set_index('DateTime', inplace=True, drop=True)
# Adiciona "BNDU_" ao início do nome da coluna
bndu.columns = ['BNDU_'+str(col) for col in bndu.columns]

Contábil¶

In [ ]:
# Merge dos DataFrames financiamentos e bndu
contabil = pd.merge(financiamentos, bndu, how='inner', on='DateTime')
# Converter indice para datetime    
contabil.index = pd.to_datetime(contabil.index)
# Converter colunas para float
contabil = contabil.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(contabil.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 81 entries, 2014-04-30 to 2020-12-31
Data columns (total 3 columns):
 #   Column                     Non-Null Count  Dtype  
---  ------                     --------------  -----  
 0   Financiamento_Comercial    81 non-null     float64
 1   Financiamento_Residencial  81 non-null     float64
 2   BNDU_Imobiliário           81 non-null     float64
dtypes: float64(3)
memory usage: 2.5 KB
None
In [ ]:
# Imprime as primeiras linhas do DataFrame
print(contabil.head())
            Financiamento_Comercial  Financiamento_Residencial  \
DateTime                                                         
2014-04-30                 1.368902                  40.828622   
2014-05-31                 1.413339                  41.847728   
2014-06-30                 1.470170                  42.764978   
2014-07-31                 1.511468                  43.669303   
2014-08-31                 1.558890                  44.566210   

            BNDU_Imobiliário  
DateTime                      
2014-04-30          0.446703  
2014-05-31          0.458711  
2014-06-30          0.496314  
2014-07-31          0.487761  
2014-08-31          0.502069  
In [ ]:
# Imprime as últimas linhas do DataFrame
print(contabil.tail())
            Financiamento_Comercial  Financiamento_Residencial  \
DateTime                                                         
2020-08-31                 1.382031                  69.958903   
2020-09-30                 1.340438                  70.671578   
2020-10-31                 1.329268                  71.434701   
2020-11-30                 1.328123                  72.217301   
2020-12-31                 1.292407                  73.093299   

            BNDU_Imobiliário  
DateTime                      
2020-08-31          2.065149  
2020-09-30          2.013951  
2020-10-31          1.976665  
2020-11-30          1.927985  
2020-12-31          1.884214  
In [ ]:
contabil.describe()
Out[ ]:
Financiamento_Comercial Financiamento_Residencial BNDU_Imobiliário
count 81.000000 81.000000 81.000000
mean 2.038938 58.558148 1.428824
std 0.435597 7.320291 0.673562
min 1.292407 40.828622 0.446703
25% 1.678244 55.039825 0.773178
50% 2.092106 59.705846 1.414289
75% 2.403230 63.103329 2.077428
max 2.725520 73.093299 2.374602
In [ ]:
categorias = ['Comercial', 'Residencial', 'BNDU']

# Aplicar a função calcula_estat para cada coluna do DataFrame
estatisticas_contabil = contabil.select_dtypes(include=['float64']).apply(calcula_estat)
# Renomear as colunas
estatisticas_contabil.columns = categorias

print(estatisticas_contabil)
                              Comercial  Residencial       BNDU
Média                          2.038938    58.558148   1.428824
Mediana                        2.092106    59.705846   1.414289
Moda                           1.292407    40.828622   0.446703
Desvio Padrão (populacional)   0.432900     7.274964   0.669391
Desvio Padrão (amostral)       0.435597     7.320291   0.673562
Variância (populacional)       0.187403    52.925097   0.448084
Variância (amostral)           0.189745    53.586661   0.453685
Coeficiente de Variação       21.363939    12.500892  47.140969
In [ ]:
import matplotlib.pyplot as plt

categorias = ["Financiamento Comercial", "Financiamento Residencial", "Bens não de uso próprio (BNDU)"]

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

for i, column in enumerate(contabil.columns):
    contabil.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Contábil", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
categorias = ["Financiamento Comercial", "Financiamento Residencial", "BNDU"]

matriz_correlacao = contabil.corr()

# Gerar a matriz de correlação e o gráfico de calor
correlacao = sns.heatmap(matriz_correlacao, annot=True, cmap='Blues')

# Definir os rótulos dos eixos x e y usando as categorias
correlacao.set_xticklabels(categorias, rotation=45)
correlacao.set_yticklabels(categorias, rotation=0)

plt.show()
No description has been provided for this image
In [ ]:
categorias = ["Financiamento Comercial", "Financiamento Residencial", "BNDU"]

plt.figure(figsize=(12, 6))

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(contabil.columns):
    plt.plot(contabil.index, contabil[coluna], marker='o', linestyle='-', label=categorias[i])

plt.title('Tendência Temporal Contábil', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Contábil em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75), title='Categorias')  # Adicionar uma legenda para as séries com título
plt.show()
No description has been provided for this image

Crédito¶

Detalhamento das operações de crédito

Contratação PF¶

Estoque em bilhões de R$

In [ ]:
# Contratação Pessoa Física
# Ler o arquivo CSV referente ao Valor contratado Pessoa Física com ponto e vírgula como delimitador
valor_contratado_pf = pd.read_csv('credito_valor_contratado.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
valor_contratado_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
valor_contratado_pf.index = pd.to_datetime(valor_contratado_pf.index)
# Adiciona VC ao início do nome das colunas
valor_contratado_pf.columns = ['VC_' + col for col in valor_contratado_pf.columns]
In [ ]:
# Converter colunas para float
valor_contratado_pf = valor_contratado_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(valor_contratado_pf.describe())
       VC_Comercial  VC_Home Equity    VC_Livre     VC_FGTS      VC_SFH
count    109.000000      109.000000  109.000000  109.000000  109.000000
mean       0.045081        0.283976    1.228455    3.737707    5.664324
std        0.018357        0.107388    0.729525    0.812380    3.358593
min        0.020811        0.116334    0.337581    1.251692    1.636985
25%        0.030833        0.202534    0.536086    3.265453    2.742686
50%        0.039920        0.256085    0.853415    3.776545    5.011176
75%        0.057055        0.362983    1.906154    4.201706    8.663919
max        0.117132        0.557333    2.600636    6.554291   13.960927
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('VC_', '') for coluna in valor_contratado_pf.columns]

fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(valor_contratado_pf.columns):
    valor_contratado_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Contratação \n Pessoa Física", fontsize=16, fontweight='bold')

plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = valor_contratado_pf.columns.str.replace('VC_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(valor_contratado_pf.columns):
    plt.plot(valor_contratado_pf.index, valor_contratado_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Valor Contratado - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Valor Contratado em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Indexadores PF¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Indexadores com ponto e vírgula como delimitador
credito_indexadores_pf = pd.read_csv('credito_indexadores.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_indexadores_pf.set_index('DateTime', inplace=True, drop=True)
# Adiciona Credito_ ao início do nome das colunas
credito_indexadores_pf.columns = ['Credito_' + col for col in credito_indexadores_pf.columns]
In [ ]:
# Converter colunas para float
credito_indexadores_pf = credito_indexadores_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Converter indice para datetime
credito_indexadores_pf.index = pd.to_datetime(credito_indexadores_pf.index)
# Imprime as informações do DataFrame
print(credito_indexadores_pf.describe())
       Credito_Prefixado  Credito_IPCA  Credito_Outros  Credito_TR
count         109.000000     90.000000      109.000000  109.000000
mean            0.155869      0.251044        0.278462   10.317928
std             0.070689      0.358097        0.484350    3.552447
min             0.057700      0.000044        0.013971    5.203805
25%             0.110401      0.008544        0.031111    7.511628
50%             0.142909      0.024560        0.048687    8.999376
75%             0.194210      0.369564        0.276183   12.886314
max             0.489120      1.226288        2.953069   18.618034
In [ ]:
import matplotlib.pyplot as plt

categorias = ['Prefixado', 'IPCA', 'Outros', 'TR']

fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(credito_indexadores_pf.columns):
    credito_indexadores_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Indexadores \n Pessoa Física", fontsize=16, fontweight='bold')

plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = credito_indexadores_pf.columns.str.replace('Credito_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_indexadores_pf.columns):
    plt.plot(credito_indexadores_pf.index, credito_indexadores_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Indexadores - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Indexadores em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Taxa PF¶

Porcentagem ao ano

In [ ]:
# Ler o arquivo CSV referente às Taxas com ponto e vírgula como delimitador
credito_taxa_pf = pd.read_csv('credito_taxa.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_taxa_pf.set_index('DateTime', inplace=True, drop=True)
# Adiciona Credito_Taxa_ ao início do nome das colunas
credito_taxa_pf.columns = ['Credito_Taxa_' + col for col in credito_taxa_pf.columns]
In [ ]:
# Converter colunas para float
credito_taxa_pf = credito_taxa_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Converter indice para datetime
credito_taxa_pf.index = pd.to_datetime(credito_taxa_pf.index)
# Imprime as informações do DataFrame
print(credito_taxa_pf.describe())
       Credito_Taxa_SFH  Credito_Taxa_FGTS  Credito_Taxa_Livre  \
count        109.000000         109.000000          109.000000   
mean           9.849541           6.657156           10.027890   
std            1.658367           1.048578            2.058505   
min            7.120000           5.410000            7.160000   
25%            8.890000           5.990000            8.410000   
50%            9.460000           6.120000            9.550000   
75%           11.260000           7.480000           11.750000   
max           13.180000           9.320000           14.590000   

       Credito_Taxa_Comercial  Credito_Taxa_Home Equity  
count              109.000000                109.000000  
mean                11.784954                 18.006055  
std                  1.798308                  3.230563  
min                  9.160000                 12.330000  
25%                 10.150000                 15.740000  
50%                 11.700000                 17.630000  
75%                 13.040000                 19.690000  
max                 15.950000                 24.530000  
In [ ]:
import matplotlib.pyplot as plt

categorias = ['SFH', 'FGTS', 'Livre', 'Comercial', 'Home Equity']

fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(credito_taxa_pf.columns):
    credito_taxa_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Taxa \n Pessoa Física\n", fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = credito_taxa_pf.columns.str.replace('Credito_Taxa_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_taxa_pf .columns):
    plt.plot(credito_taxa_pf.index, credito_taxa_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Taxa - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Taxa em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Loan to Value (LTV) PF¶

Porcentagem

In [ ]:
# Ler o arquivo CSV referente ao Loan to Value (LTV) com ponto e vírgula como delimitador
credito_ltv_pf = pd.read_csv('credito_ltv.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_ltv_pf.set_index('DateTime', inplace=True, drop=True)
# Adiciona Credito_LTV_ ao início do nome das colunas
credito_ltv_pf.columns = ['Credito_LTV_' + col for col in credito_ltv_pf.columns]
In [ ]:
# Converter colunas para float
credito_ltv_pf = credito_ltv_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Converter indice para datetime
credito_ltv_pf.index = pd.to_datetime(credito_ltv_pf.index)
# Imprime as informações do DataFrame
print(credito_ltv_pf.describe())
       Credito_LTV_SFH  Credito_LTV_FGTS  Credito_LTV_Livre  \
count       109.000000        109.000000         109.000000   
mean         66.972844         74.440367          59.561651   
std           3.033744          2.191687           3.317696   
min          58.940000         71.040000          47.360000   
25%          64.300000         72.860000          56.970000   
50%          66.920000         73.650000          60.140000   
75%          68.800000         76.050000          62.560000   
max          74.080000         78.930000          64.590000   

       Credito_LTV_Comercial  Credito_LTV_Home Equity  
count             109.000000               109.000000  
mean               60.233486                45.578257  
std                 3.389893                 5.013987  
min                45.170000                38.930000  
25%                58.330000                42.190000  
50%                59.840000                44.360000  
75%                62.440000                48.240000  
max                68.670000                72.910000  
In [ ]:
categorias = ['SFH', 'FGTS', 'Livre', 'Comercial', 'Home Equity']
# Aplicar a função calcula_estat para cada coluna do DataFrame
estatisticas_credito_ltv_pf = credito_ltv_pf.select_dtypes(include=['float64']).apply(calcula_estat)
# Renoemar as colunas
estatisticas_credito_ltv_pf.columns = categorias

print(estatisticas_credito_ltv_pf)
                                    SFH       FGTS      Livre  Comercial  \
Média                         66.972844  74.440367  59.561651  60.233486   
Mediana                       66.920000  73.650000  60.140000  59.840000   
Moda                          63.870000  73.480000  56.640000  57.470000   
Desvio Padrão (populacional)   3.019796   2.181610   3.302442   3.374308   
Desvio Padrão (amostral)       3.033744   2.191687   3.317696   3.389893   
Variância (populacional)       9.119165   4.759422  10.906122  11.385951   
Variância (amostral)           9.203602   4.803491  11.007105  11.491377   
Coeficiente de Variação        4.529812   2.944218   5.570188   5.627921   

                              Home Equity  
Média                           45.578257  
Mediana                         44.360000  
Moda                            41.430000  
Desvio Padrão (populacional)     4.990935  
Desvio Padrão (amostral)         5.013987  
Variância (populacional)        24.909427  
Variância (amostral)            25.140070  
Coeficiente de Variação         11.000832  
In [ ]:
import matplotlib.pyplot as plt

categorias = ['SFH', 'FGTS', 'Livre', 'Comercial', 'Home Equity']

fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(credito_ltv_pf.columns):
    credito_ltv_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Loan To Value (LTV) \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = credito_ltv_pf.columns.str.replace('Credito_LTV_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_ltv_pf.columns):
    plt.plot(credito_ltv_pf.index, credito_ltv_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Loan to Value - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('LTV em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Crédito PF¶

In [ ]:
# Concatena os DataFrames valor_contratado, indexadores, taxa e ltv ao longo do eixo das colunas (axis=1)
credito_pf = pd.concat([valor_contratado_pf, credito_indexadores_pf, taxa_pf, ltv_pf], axis=1)
# Adiciona PF ao início do nome das colunas para sinalizar Pessoa Física 
credito_pf.columns = [col + '_PF' for col in credito_pf.columns]
In [ ]:
# Converter colunas para float
credito_pf = credito_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as estatísticas do DataFrame
# print(credito_pf.describe())

Contratação PJ¶

Estoque em milhões de R$

In [ ]:
# Ler o arquivo CSV referente ao Valor contratado Pessoa Jurídica com ponto e vírgula como delimitador
valor_contratado_pj = pd.read_csv('credito_valor_contratado_pj.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
valor_contratado_pj.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
valor_contratado_pj.index = pd.to_datetime(valor_contratado_pj.index)
# Adiciona VC ao início do nome das colunas
valor_contratado_pj.columns = ['VC_' + col for col in valor_contratado_pj.columns]
In [ ]:
# Converter colunas para float
valor_contratado_pj = valor_contratado_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(valor_contratado_pj.describe())
       VC_Comercial      VC_FGTS     VC_Livre       VC_SFH
count    109.000000   109.000000   109.000000   109.000000
mean     117.011642   223.193539   335.544097   466.823647
std      175.187122   169.557341   367.833245   279.038858
min        0.480000     4.888641     2.542030    33.032582
25%       11.838232   105.663093    91.661385   276.179046
50%       41.529467   188.964192   231.784345   445.111477
75%      166.979222   287.815778   442.753192   633.859711
max      946.632069  1147.518933  2524.422472  1681.867654
In [ ]:
estatisticas_valor_contratado_pj = valor_contratado_pj.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_valor_contratado_pj)
                              VC_Comercial       VC_FGTS       VC_Livre  \
Média                           117.011642    223.193539     335.544097   
Mediana                          41.529467    188.964192     231.784345   
Moda                              0.480000      4.888641       2.542030   
Desvio Padrão (populacional)    174.381659    168.777763     366.142049   
Desvio Padrão (amostral)        175.187122    169.557341     367.833245   
Variância (populacional)      30408.963159  28485.933215  134059.999885   
Variância (amostral)          30690.527633  28749.691856  135301.296180   
Coeficiente de Variação         149.717685     75.968750     109.622922   

                                    VC_SFH  
Média                           466.823647  
Mediana                         445.111477  
Moda                             33.032582  
Desvio Padrão (populacional)    277.755913  
Desvio Padrão (amostral)        279.038858  
Variância (populacional)      77148.347459  
Variância (amostral)          77862.684009  
Coeficiente de Variação          59.773934  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('VC_', '') for coluna in valor_contratado_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(valor_contratado_pj.columns):
    valor_contratado_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Contratação \n Pessoa Jurídica\n ", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = valor_contratado_pj.columns.str.replace('VC_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(valor_contratado_pj.columns):
    plt.plot(valor_contratado_pj.index, valor_contratado_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Valor Contratado - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Valor Contratado em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Indexadores PJ¶

Estoque em milhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Indexadores com ponto e vírgula como delimitador
credito_indexadores_pj = pd.read_csv('credito_indexadores_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_indexadores_pj.set_index('DateTime',  inplace=True, drop=True)
# Converter indice para datetime
credito_indexadores_pj.index = pd.to_datetime(credito_indexadores_pj.index)
# Adiciona Credito_ ao início do nome das colunas
credito_indexadores_pj.columns = ['Credito_' + col for col in credito_indexadores_pj.columns]
In [ ]:
# Converter colunas para float
credito_indexadores_pj = credito_indexadores_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(credito_indexadores_pj.describe())
       Credito_IPCA  Credito_Outros  Credito_CDI  Credito_Prefixado  \
count      8.000000       49.000000    53.000000          95.000000   
mean      28.058558       53.444666   129.966088         303.767587   
std       16.328193       61.519716   135.164482         412.291070   
min        8.907003        0.050000     3.000000           0.135000   
25%       18.028171        5.770710    20.000000          49.595924   
50%       24.345500       27.304440    75.000000         152.994227   
75%       37.072684       82.440139   195.315041         444.333156   
max       52.400000      229.684015   476.327243        2654.607993   

        Credito_TR  
count   109.000000  
mean    788.541911  
std     461.758416  
min      91.965873  
25%     460.905123  
50%     675.666774  
75%    1035.135479  
max    2783.506263  
In [ ]:
estatisticas_credito_indexadores_pj = credito_indexadores_pj.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_credito_indexadores_pj)
                              Credito_IPCA  Credito_Outros   Credito_CDI  \
Média                            28.058558       53.444666    129.966088   
Mediana                          24.345500       27.304440     75.000000   
Moda                              8.907003        0.050000      5.000000   
Desvio Padrão (populacional)     15.273626       60.888728    133.883273   
Desvio Padrão (amostral)         16.328193       61.519716    135.164482   
Variância (populacional)        233.283655     3707.437155  17924.730747   
Variância (amostral)            266.609891     3784.675429  18269.437108   
Coeficiente de Variação          58.193273      115.109178    103.999808   

                              Credito_Prefixado     Credito_TR  
Média                                303.767587     788.541911  
Mediana                              152.994227     675.666774  
Moda                                  10.000000      91.965873  
Desvio Padrão (populacional)         410.115377     459.635378  
Desvio Padrão (amostral)             412.291070     461.758416  
Variância (populacional)          168194.622263  211264.680268  
Variância (amostral)              169983.926755  213220.834715  
Coeficiente de Variação              135.725827      58.558513  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Credito_', '') for coluna in credito_indexadores_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(credito_indexadores_pj.columns):
    credito_indexadores_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Indexadores \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = credito_indexadores_pj.columns.str.replace('Credito_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_indexadores_pj.columns):
    plt.plot(credito_indexadores_pj.index, credito_indexadores_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Indexadores - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Indexadores em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Taxa PJ¶

Porcentagem ao ano

In [ ]:
# Ler o arquivo CSV referente às Taxas com ponto e vírgula como delimitador
credito_taxa_pj = pd.read_csv('credito_taxa_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_taxa_pj.set_index('DateTime',  inplace=True, drop=True)
# Converter indice para datetime
credito_taxa_pj.index = pd.to_datetime(credito_taxa_pj.index)
# Adiciona Credito_Taxa_ ao início do nome das colunas
credito_taxa_pj.columns = ['Credito_'+ col for col in credito_taxa_pj.columns]
In [ ]:
# Converter colunas para float
credito_taxa_pj = credito_taxa_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(credito_taxa_pj.describe())
       Credito_SFH  Credito_FGTS  Credito_Livre  Credito_Comercial
count   109.000000    109.000000     109.000000         109.000000
mean      9.968165      8.957064      11.095505          11.543028
std       2.319295      0.998368       2.442452           2.479058
min       4.800000      8.290000       4.340000           6.330000
25%       8.520000      8.290000       9.890000           9.480000
50%       9.980000      8.290000      10.680000          11.160000
75%      11.500000      9.670000      12.540000          13.370000
max      14.400000     11.350000      16.110000          17.240000
In [ ]:
estatisticas_credito_taxa_pj = credito_taxa_pj.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_credito_taxa_pj)
                              Credito_SFH  Credito_FGTS  Credito_Livre  \
Média                            9.968165      8.957064      11.095505   
Mediana                          9.980000      8.290000      10.680000   
Moda                             5.490000      8.290000       8.710000   
Desvio Padrão (populacional)     2.308632      0.993778       2.431222   
Desvio Padrão (amostral)         2.319295      0.998368       2.442452   
Variância (populacional)         5.329780      0.987595       5.910839   
Variância (amostral)             5.379130      0.996739       5.965569   
Coeficiente de Variação         23.267022     11.146156      22.012983   

                              Credito_Comercial  
Média                                 11.543028  
Mediana                               11.160000  
Moda                                   8.690000  
Desvio Padrão (populacional)           2.467660  
Desvio Padrão (amostral)               2.479058  
Variância (populacional)               6.089346  
Variância (amostral)                   6.145729  
Coeficiente de Variação               21.476671  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Credito_', '') for coluna in credito_taxa_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(credito_taxa_pj.columns):
    credito_taxa_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Crédito - Taxa  \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = credito_taxa_pj.columns.str.replace('Credito_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_taxa_pj.columns):
    plt.plot(credito_taxa_pj.index, credito_taxa_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Crédito \n Taxa - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Taxa em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Crédito PJ¶

In [ ]:
# Concatena os DataFrames valor_contratado_pj, indexadores_pj e taxa_pj ao longo do eixo das colunas (axis=1)
credito_pj = pd.concat([valor_contratado_pj, indexadores_pj, taxa_pj], axis=1)
# Adiciona PJ ao início do nome das colunas para sinalizar Pessoa Jurídica
credito_pj.columns = [col + '_PJ' for col in credito_pj.columns]
In [ ]:
credito_pj = credito_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as estatísticas do DataFrame
print(credito_pj.describe())
       VC_Comercial_PJ   VC_FGTS_PJ  VC_Livre_PJ    VC_SFH_PJ  \
count       109.000000   109.000000   109.000000   109.000000   
mean        117.011642   223.193539   335.544097   466.823647   
std         175.187122   169.557341   367.833245   279.038858   
min           0.480000     4.888641     2.542030    33.032582   
25%          11.838232   105.663093    91.661385   276.179046   
50%          41.529467   188.964192   231.784345   445.111477   
75%         166.979222   287.815778   442.753192   633.859711   
max         946.632069  1147.518933  2524.422472  1681.867654   

       Credito_IPCA_PJ  Credito_Outros_PJ  Credito_CDI_PJ  \
count         8.000000          49.000000       53.000000   
mean         28.058558          53.444666      129.966088   
std          16.328193          61.519716      135.164482   
min           8.907003           0.050000        3.000000   
25%          18.028171           5.770710       20.000000   
50%          24.345500          27.304440       75.000000   
75%          37.072684          82.440139      195.315041   
max          52.400000         229.684015      476.327243   

       Credito_Prefixado_PJ  Credito_TR_PJ  Credito_SFH_PJ  Credito_FGTS_PJ  \
count             95.000000     109.000000      109.000000       109.000000   
mean             303.767587     788.541911        9.968165         8.957064   
std              412.291070     461.758416        2.319295         0.998368   
min                0.135000      91.965873        4.800000         8.290000   
25%               49.595924     460.905123        8.520000         8.290000   
50%              152.994227     675.666774        9.980000         8.290000   
75%              444.333156    1035.135479       11.500000         9.670000   
max             2654.607993    2783.506263       14.400000        11.350000   

       Credito_Livre_PJ  Credito_Comercial_PJ  
count        109.000000            109.000000  
mean          11.095505             11.543028  
std            2.442452              2.479058  
min            4.340000              6.330000  
25%            9.890000              9.480000  
50%           10.680000             11.160000  
75%           12.540000             13.370000  
max           16.110000             17.240000  

Crédito PF + Crédito PJ¶

In [ ]:
# Merge dos DataFrames credito_pessoa_fisica e credito_pessoa_juridica 
credito = pd.merge(credito_pf, credito_pj, how='inner', on='DateTime')
# Converter índice para datetime
credito.index = pd.to_datetime(credito.index)
# Converter colunas para float
credito = credito.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(credito.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30
Data columns (total 32 columns):
 #   Column                       Non-Null Count  Dtype  
---  ------                       --------------  -----  
 0   VC_Comercial_PF              0 non-null      float64
 1   VC_Home Equity_PF            0 non-null      float64
 2   VC_Livre_PF                  0 non-null      float64
 3   VC_FGTS_PF                   0 non-null      float64
 4   VC_SFH_PF                    0 non-null      float64
 5   Credito_Prefixado_PF         0 non-null      float64
 6   Credito_IPCA_PF              0 non-null      float64
 7   Credito_Outros_PF            0 non-null      float64
 8   Credito_TR_PF                0 non-null      float64
 9   Credito_Taxa_SFH_PF          109 non-null    float64
 10  Credito_Taxa_FGTS_PF         109 non-null    float64
 11  Credito_Taxa_Livre_PF        109 non-null    float64
 12  Credito_Taxa_Comercial_PF    109 non-null    float64
 13  Credito_Taxa_Home Equity_PF  109 non-null    float64
 14  Credito_LTV_SFH_PF           109 non-null    float64
 15  Credito_LTV_FGTS_PF          109 non-null    float64
 16  Credito_LTV_Livre_PF         109 non-null    float64
 17  Credito_LTV_Comercial_PF     109 non-null    float64
 18  Credito_LTV_Home Equity_PF   109 non-null    float64
 19  VC_Comercial_PJ              109 non-null    float64
 20  VC_FGTS_PJ                   109 non-null    float64
 21  VC_Livre_PJ                  109 non-null    float64
 22  VC_SFH_PJ                    109 non-null    float64
 23  Credito_IPCA_PJ              8 non-null      float64
 24  Credito_Outros_PJ            49 non-null     float64
 25  Credito_CDI_PJ               53 non-null     float64
 26  Credito_Prefixado_PJ         95 non-null     float64
 27  Credito_TR_PJ                109 non-null    float64
 28  Credito_SFH_PJ               109 non-null    float64
 29  Credito_FGTS_PJ              109 non-null    float64
 30  Credito_Livre_PJ             109 non-null    float64
 31  Credito_Comercial_PJ         109 non-null    float64
dtypes: float64(32)
memory usage: 28.1 KB
None
In [ ]:
# Imprime as primeiras linhas do DataFrame
print(credito.head())
            VC_Comercial_PF  VC_Home Equity_PF  VC_Livre_PF  VC_FGTS_PF  \
DateTime                                                                  
2014-04-30         0.025627           0.272721     2.022522    2.270508   
2014-05-31         0.048241           0.273943     2.397400    2.675238   
2014-06-30         0.045680           0.430680     2.080355    2.943574   
2014-07-31         0.057653           0.275115     2.226900    3.590715   
2014-08-31         0.058745           0.293163     2.197764    3.318467   

            VC_SFH_PF  Credito_Prefixado_PF  Credito_IPCA_PF  \
DateTime                                                       
2014-04-30   5.414101              0.066203              NaN   
2014-05-31   6.697185              0.066758              NaN   
2014-06-30   5.689549              0.220339              NaN   
2014-07-31   5.673874              0.101505              NaN   
2014-08-31   5.279652              0.107494              NaN   

            Credito_Outros_PF  Credito_TR_PF  Credito_Taxa_SFH_PF  ...  \
DateTime                                                           ...   
2014-04-30           0.042165       9.897111                  NaN  ...   
2014-05-31           0.031836      11.993413                  NaN  ...   
2014-06-30           0.031728      10.937771                  NaN  ...   
2014-07-31           0.031111      11.691641                  NaN  ...   
2014-08-31           0.017469      11.022828                  NaN  ...   

            VC_SFH_PJ  Credito_IPCA_PJ  Credito_Outros_PJ  Credito_CDI_PJ  \
DateTime                                                                    
2014-04-30        NaN              NaN                NaN             NaN   
2014-05-31        NaN              NaN                NaN             NaN   
2014-06-30        NaN              NaN                NaN             NaN   
2014-07-31        NaN              NaN                NaN             NaN   
2014-08-31        NaN              NaN                NaN             NaN   

            Credito_Prefixado_PJ  Credito_TR_PJ  Credito_SFH_PJ  \
DateTime                                                          
2014-04-30                   NaN            NaN             NaN   
2014-05-31                   NaN            NaN             NaN   
2014-06-30                   NaN            NaN             NaN   
2014-07-31                   NaN            NaN             NaN   
2014-08-31                   NaN            NaN             NaN   

            Credito_FGTS_PJ  Credito_Livre_PJ  Credito_Comercial_PJ  
DateTime                                                             
2014-04-30              NaN               NaN                   NaN  
2014-05-31              NaN               NaN                   NaN  
2014-06-30              NaN               NaN                   NaN  
2014-07-31              NaN               NaN                   NaN  
2014-08-31              NaN               NaN                   NaN  

[5 rows x 32 columns]

Estoque¶

Carteira de Crédito PF¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente à Carteira de Crédito de Pessoa Física com ponto e vírgula como delimitador
carteira_credito_pf = pd.read_csv('estoque_carteira_de_credito.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
carteira_credito_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
carteira_credito_pf.index = pd.to_datetime(carteira_credito_pf.index)
# Adiciona Carteira_ ao início do nome das colunas
carteira_credito_pf.columns = ['Estoque_Carteira_' + col for col in carteira_credito_pf.columns]
In [ ]:
# Converter colunas para float
carteira_credito_pf = carteira_credito_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(carteira_credito_pf.describe())
       Estoque_Carteira_Comercial  Estoque_Carteira_Home Equity  \
count                  109.000000                    109.000000   
mean                     1.727357                     12.095405   
std                      0.469143                      1.236801   
min                      0.561784                     10.320047   
25%                      1.629101                     11.324031   
50%                      1.788955                     11.825104   
75%                      1.949600                     12.238563   
max                      2.986108                     16.138588   

       Estoque_Carteira_Livre  Estoque_Carteira_FGTS  Estoque_Carteira_SFH  
count              109.000000             109.000000            109.000000  
mean                62.095300             273.026605            287.861167  
std                  8.322603              79.895769             78.746554  
min                 50.356458             122.111077            180.260926  
25%                 55.578010             205.667161            246.022067  
50%                 61.104358             284.456814            252.760006  
75%                 66.165892             343.520091            323.590577  
max                 80.713873             402.978885            480.468710  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_Carteira_', '') for coluna in carteira_credito_pf.columns]


fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(carteira_credito_pf.columns):
    carteira_credito_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Carteira de Crédito \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = carteira_credito_pf.columns.str.replace('Estoque_Carteira_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(carteira_credito_pf.columns):
    plt.plot(carteira_credito_pf.index, carteira_credito_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Carteira de Crédito - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Carteira de Crédito em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Indexadores PF¶

Estoque em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Indexadores de Pessoas Físicas com ponto e vírgula como delimitador
estoque_indexadores_pf = pd.read_csv('estoque_indexadores.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
estoque_indexadores_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
estoque_indexadores_pf.index = pd.to_datetime(estoque_indexadores_pf.index)
# Adiciona Estoque_ ao início do nome das colunas
estoque_indexadores_pf.columns = ['Estoque_' + col for col in estoque_indexadores_pf.columns]
In [ ]:
# Converter colunas para float
estoque_indexadores_pf = estoque_indexadores_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(estoque_indexadores_pf.describe())
       Estoque_Prefixado  Estoque_IPCA  Estoque_Outros  Estoque_TR
count         109.000000     94.000000      109.000000  109.000000
mean            5.710194      6.833594        6.204678  618.997771
std             0.805023      8.335445        7.564750  139.730209
min             4.120013      0.000055        0.829092  365.561372
25%             5.008484      0.110877        1.378890  522.537205
50%             5.562816      0.238389        1.540259  599.866255
75%             6.124464     16.620500        9.834744  701.797164
max             7.596104     20.136287       23.060182  933.880035
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_', '') for coluna in estoque_indexadores_pf.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(estoque_indexadores_pf.columns):
    estoque_indexadores_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Indexadores \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = estoque_indexadores_pf.columns.str.replace('Estoque_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(estoque_indexadores_pf.columns):
    plt.plot(estoque_indexadores_pf.index, estoque_indexadores_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Indexadores - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Carteira de Crédito em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Risco da Operação PF¶

Porcentagem

In [ ]:
# Ler o arquivo CSV referente ao Risco da Operação de Pessoas Físicas com ponto e vírgula como delimitador
risco_da_operacao_pf = pd.read_csv('estoque_risco_da_operacao.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
risco_da_operacao_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
risco_da_operacao_pf.index = pd.to_datetime(risco_da_operacao_pf.index)
# Adiciona Risco_ ao início do nome das colunas
risco_da_operacao_pf.columns = ['Estoque_Risco_' + col for col in risco_da_operacao_pf.columns]
# Define a ordem das colunas de risco em ordem crescente
ordem_das_colunas_crescente = ['Estoque_Risco_AA', 'Estoque_Risco_A', 'Estoque_Risco_B', 'Estoque_Risco_C', 'Estoque_Risco_D ou mais']
# Reordena as colunas do DataFrame em ordem crescente
risco_da_operacao_pf = risco_da_operacao_pf[ordem_das_colunas_crescente]
In [ ]:
# Converter colunas para float
risco_da_operacao_pf = risco_da_operacao_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(risco_da_operacao_pf.describe())
       Estoque_Risco_AA  Estoque_Risco_A  Estoque_Risco_B  Estoque_Risco_C  \
count        109.000000       109.000000       109.000000       109.000000   
mean          65.351743        10.014954        11.790000         7.958073   
std            6.134965         4.988611         1.233126         1.057124   
min           44.830000         5.590000         9.750000         6.020000   
25%           64.490000         6.780000        11.020000         7.060000   
50%           67.500000         8.470000        11.620000         7.740000   
75%           69.110000        11.110000        12.480000         8.720000   
max           72.060000        28.630000        15.560000        10.080000   

       Estoque_Risco_D ou mais  
count               109.000000  
mean                  4.884587  
std                   0.523318  
min                   3.520000  
25%                   4.640000  
50%                   4.880000  
75%                   5.090000  
max                   5.950000  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_', '').replace('_', ' ') for coluna in risco_da_operacao_pf.columns]


fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(risco_da_operacao_pf.columns):
    risco_da_operacao_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Risco da Operação \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = risco_da_operacao_pf.columns.str.replace('Estoque_', '').str.replace('_', ' ')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(risco_da_operacao_pf.columns):
    plt.plot(risco_da_operacao_pf.index, risco_da_operacao_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Risco da Operação - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Risco da Operação em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Inadimplência PF¶

Porcentagem

In [ ]:
# Ler o arquivo CSV referente à Inadimplência de Pessoas Físicas com ponto e vírgula como delimitador
inadimplencia_pf = pd.read_csv('estoque_inadimplencia.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
inadimplencia_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
inadimplencia_pf.index = pd.to_datetime(inadimplencia_pf.index)
# Adiciona Estoque_Inadimplencia_ ao início do nome das colunas
inadimplencia_pf.columns = ['Estoque_' + col for col in inadimplencia_pf.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
inadimplencia_pf = inadimplencia_pf.iloc[:-2]
In [ ]:
# Converter colunas para float
inadimplencia_pf = inadimplencia_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(inadimplencia_pf.describe())
       Estoque_Home Equity  Estoque_SFH  Estoque_Livre  Estoque_FGTS  \
count           109.000000          0.0     109.000000    109.000000   
mean              4.472018          NaN       1.319174      2.132936   
std               1.233416          NaN       0.374144      0.380454   
min               2.190000          NaN       0.670000      1.440000   
25%               3.580000          NaN       0.970000      1.850000   
50%               4.330000          NaN       1.310000      2.070000   
75%               5.580000          NaN       1.620000      2.380000   
max               6.590000          NaN       2.200000      3.230000   

       Estoque_Comercial  
count         109.000000  
mean            1.200459  
std             0.351595  
min             0.560000  
25%             0.930000  
50%             1.140000  
75%             1.480000  
max             1.990000  
In [ ]:
# Elimina coluna Estoque_SFH
inadimplencia_pf.drop(columns=['Estoque_SFH'], inplace=True)
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_', '') for coluna in inadimplencia_pf.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(inadimplencia_pf.columns):
    inadimplencia_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Inadimplência \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = inadimplencia_pf.columns.str.replace('Estoque_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(inadimplencia_pf.columns):
    plt.plot(inadimplencia_pf.index, inadimplencia_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])   

plt.title('Tendência Temporal Estoque \n Inadimplência - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Inadimplência em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Ativos Problemáticos PF¶

Em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Ativos Problemáticos de Pessoas Físicas com ponto e vírgula como delimitador
ativos_problematicos_pf = pd.read_csv('estoque_ativos_problematicos.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
ativos_problematicos_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
ativos_problematicos_pf.index = pd.to_datetime(ativos_problematicos_pf.index)
# Adiciona Estoque_AP_ ao início do nome das colunas
ativos_problematicos_pf.columns = ['Estoque_AP_' + col for col in ativos_problematicos_pf.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
ativos_problematicos_pf = ativos_problematicos_pf.iloc[:-2]
In [ ]:
# Converter colunas para float
ativos_problematicos_pf = ativos_problematicos_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(ativos_problematicos_pf.describe())
       Estoque_AP_Comercial  Estoque_AP_Home Equity  Estoque_AP_Livre  \
count                   0.0              109.000000        109.000000   
mean                    NaN                1.059793          2.006863   
std                     NaN                0.267735          0.387870   
min                     NaN                0.619129          1.146923   
25%                     NaN                0.843009          1.682558   
50%                     NaN                1.046805          1.995765   
75%                     NaN                1.264995          2.298662   
max                     NaN                1.536512          2.724873   

       Estoque_AP_SFH  Estoque_AP_FGTS  
count      109.000000       109.000000  
mean        10.627366        19.047434  
std          1.470095         8.776903  
min          8.409809         8.773949  
25%          9.580357        12.260033  
50%         10.487986        14.608386  
75%         11.553059        26.351608  
max         15.339049        37.723416  
In [ ]:
# Eliminar coluna Estoque_AP_Comercial
ativos_problematicos_pf.drop('Estoque_AP_Comercial', axis=1, inplace=True)
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_AP_', '') for coluna in ativos_problematicos_pf.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(ativos_problematicos_pf.columns):
    ativos_problematicos_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Ativos Problemáticos \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = ativos_problematicos_pf.columns.str.replace('Estoque_AP_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(ativos_problematicos_pf.columns):
    plt.plot(ativos_problematicos_pf.index, ativos_problematicos_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Ativos Problemáticos - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Ativos Problemáticos em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Valor da Próxima Parcela PF¶

Em milhares de R$

In [ ]:
# Ler o arquivo CSV referente ao Valor da Próxima Parcela de Pessoas Físicas com ponto e vírgula como delimitador
valor_proxima_parcela_pf = pd.read_csv('estoque_valor_proxima_parcela.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
valor_proxima_parcela_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
valor_proxima_parcela_pf.index = pd.to_datetime(valor_proxima_parcela_pf.index)
# Adiciona Estoque_VPP_ ao início do nome das colunas
valor_proxima_parcela_pf.columns = ['Estoque_VPP_' + col for col in valor_proxima_parcela_pf.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
valor_proxima_parcela_pf = valor_proxima_parcela_pf.iloc[:-2]
In [ ]:
# Converter para float
valor_proxima_parcela_pf = valor_proxima_parcela_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(valor_proxima_parcela_pf.describe())
       Estoque_VPP_Home Equity  Estoque_VPP_SFH  Estoque_VPP_Livre  \
count                86.000000        86.000000          86.000000   
mean               1631.840698      1460.408140        2464.850233   
std                  62.149709        48.348384         139.694951   
min                1547.600000      1244.010000        2106.360000   
25%                1578.150000      1442.562500        2390.420000   
50%                1617.270000      1459.135000        2459.815000   
75%                1669.692500      1469.397500        2593.855000   
max                1797.170000      1578.720000        2652.840000   

       Estoque_VPP_FGTS  Estoque_VPP_Comercial  
count         86.000000              86.000000  
mean         500.314186            2043.395814  
std           30.008494             177.875189  
min          441.370000            1835.540000  
25%          480.195000            1887.722500  
50%          493.475000            1947.905000  
75%          516.812500            2207.502500  
max          562.340000            2352.850000  
In [ ]:
categorias = [coluna.replace('Estoque_VPP_', '') for coluna in valor_proxima_parcela_pf.columns]

fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(valor_proxima_parcela_pf.columns):
    valor_proxima_parcela_pf.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)

    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Valor da Próxima Parcela \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = valor_proxima_parcela_pf.columns.str.replace('Estoque_VPP_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(valor_proxima_parcela_pf.columns):
    plt.plot(valor_proxima_parcela_pf.index, valor_proxima_parcela_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Valor da Próxima Parcela - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Valor da Próxima Parcela em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Estoque PF¶

In [ ]:
# Concatena os DataFrames carteira_credito_pf, indexadores_pf, risco_da_operacao_pf, inadimplencia_pf, ativos_problematicos_pf e valor_proxima_parcela_pf ao longo do eixo das colunas (axis=1)
estoque_pf = pd.concat([carteira_credito_pf, estoque_indexadores_pf, risco_da_operacao_pf, inadimplencia_pf, ativos_problematicos_pf, valor_proxima_parcela_pf], axis=1)
# Adiciona PF ao início do nome das colunas para sinalizar Pessoa Física
estoque_pf.columns = estoque_pf.columns + '_PF'

Carteira de Crédito PJ¶

Em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente à Carteira de Crédito de Pessoa Jurídica com ponto e vírgula como delimitador
carteira_credito_pj = pd.read_csv('estoque_carteira_de_credito_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
carteira_credito_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
carteira_credito_pj.index = pd.to_datetime(carteira_credito_pj.index)
# Adiciona Carteira_ ao início do nome das colunas
carteira_credito_pj.columns = ['Estoque_Carteira_' + col for col in carteira_credito_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
carteira_credito_pj = carteira_credito_pj.iloc[:-2]
In [ ]:
# Converter colunas para float
carteira_credito_pj = carteira_credito_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(carteira_credito_pj.describe())
       Estoque_Carteira_Home Equity  Estoque_Carteira_FGTS  \
count                           0.0             109.000000   
mean                            NaN               1.960835   
std                             NaN               0.578664   
min                             NaN               0.917347   
25%                             NaN               1.620300   
50%                             NaN               2.007750   
75%                             NaN               2.478395   
max                             NaN               2.971825   

       Estoque_Carteira_Comercial  Estoque_Carteira_Livre  \
count                  109.000000              109.000000   
mean                    10.510801               15.591446   
std                      5.253408                7.215262   
min                      1.461609                7.582781   
25%                      7.407607                9.542550   
50%                      9.210295               13.657219   
75%                     15.933175               19.507877   
max                     19.111961               32.086141   

       Estoque_Carteira_SFH  
count            109.000000  
mean              15.773987  
std                8.677373  
min                5.311441  
25%                7.617477  
50%               12.779000  
75%               26.333336  
max               27.500937  
In [ ]:
# Eliminar coluna Estoque_Carteira_Home Equity
carteira_credito_pj.drop('Estoque_Carteira_Home Equity', axis=1, inplace=True)
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_Carteira_', '') for coluna in carteira_credito_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(carteira_credito_pj.columns):
    carteira_credito_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Carteira de Crédito \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = carteira_credito_pj.columns.str.replace('Estoque_Carteira_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(carteira_credito_pj.columns):
    plt.plot(carteira_credito_pj.index, carteira_credito_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Carteira de Crédito - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Carteira de Crédito em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Indexadores PJ¶

Em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Indexadores de Pessoas Jurídicas com ponto e vírgula como delimitador
estoque_indexadores_pj = pd.read_csv('estoque_indexadores_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
estoque_indexadores_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
estoque_indexadores_pj.index = pd.to_datetime(estoque_indexadores_pj.index)
# Adiciona Estoque_Indexadores ao início do nome das colunas
estoque_indexadores_pj.columns = ['Estoque_' + col for col in estoque_indexadores_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
estoque_indexadores_pj = estoque_indexadores_pj.iloc[:-2]
In [ ]:
# Converter colunas para float
estoque_indexadores_pj = estoque_indexadores_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(estoque_indexadores_pj.describe())
       Estoque_IPCA  Estoque_Prefixado  Estoque_Outros  Estoque_CDI  \
count     36.000000         109.000000      109.000000   109.000000   
mean       0.108316           0.079402        0.824531     1.422932   
std        0.051575           0.076731        1.959710     0.636736   
min        0.005033           0.000000        0.000016     0.608025   
25%        0.082285           0.016216        0.000590     0.948105   
50%        0.124947           0.035543        0.005463     1.286519   
75%        0.149089           0.154582        0.223957     1.728116   
max        0.162773           0.221411        7.952713     3.283441   

       Estoque_TR  
count  109.000000  
mean    41.474429  
std     16.143992  
min     19.730944  
25%     25.099155  
50%     42.041332  
75%     57.750972  
max     62.861540  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_', '') for coluna in estoque_indexadores_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(estoque_indexadores_pj.columns):
    estoque_indexadores_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Indexadores \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = estoque_indexadores_pj.columns.str.replace('Estoque_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(estoque_indexadores_pj.columns):
    plt.plot(estoque_indexadores_pj.index, estoque_indexadores_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Indexadores - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Indexadores em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Risco da Operação PJ¶

Porcentagem

In [ ]:
# Ler o arquivo CSV referente ao Risco da Operação de Pessoas Jurídicas com ponto e vírgula como delimitador
risco_da_operacao_pj = pd.read_csv('estoque_risco_operacao_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
risco_da_operacao_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
risco_da_operacao_pj.index = pd.to_datetime(risco_da_operacao_pj.index)
# Adiciona Risco_ ao início do nome das colunas
risco_da_operacao_pj.columns = ['Estoque_Risco_' + col for col in risco_da_operacao_pj.columns]
# Define a ordem das colunas de risco em ordem crescente
ordem_das_colunas_crescente = ['Estoque_Risco_AA', 'Estoque_Risco_A', 'Estoque_Risco_B', 'Estoque_Risco_C', 'Estoque_Risco_D ou mais']
# Reordena as colunas do DataFrame em ordem crescente
risco_da_operacao_pj = risco_da_operacao_pj[ordem_das_colunas_crescente]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
risco_da_operacao_pj = risco_da_operacao_pj.iloc[:-2]
In [ ]:
# Converter colunas para float 
risco_da_operacao_pj = risco_da_operacao_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(risco_da_operacao_pj.describe())
       Estoque_Risco_AA  Estoque_Risco_A  Estoque_Risco_B  Estoque_Risco_C  \
count        109.000000       109.000000       109.000000       109.000000   
mean          39.165321        17.346514        16.118165         9.571376   
std            5.663680         4.137660         3.491584         1.939256   
min           30.980000         9.510000        11.310000         3.610000   
25%           34.480000        13.640000        13.260000         8.820000   
50%           38.440000        17.220000        14.330000         9.500000   
75%           42.970000        20.940000        19.270000        10.390000   
max           53.910000        25.730000        24.040000        14.880000   

       Estoque_Risco_D ou mais  
count               109.000000  
mean                 17.799908  
std                  11.183172  
min                   0.990000  
25%                   6.290000  
50%                  19.700000  
75%                  28.310000  
max                  32.490000  
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_', '').replace('_', ' ') for coluna in risco_da_operacao_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))

for i, column in enumerate(risco_da_operacao_pj.columns):
    risco_da_operacao_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Risco da Operação \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = risco_da_operacao_pj.columns.str.replace('Estoque_', '').str.replace('_', ' ')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(risco_da_operacao_pj.columns):
    plt.plot(risco_da_operacao_pj.index, risco_da_operacao_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Risco da Operação - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Risco da Operação em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Inadimplência PJ¶

Porcentagem

In [ ]:
# Ler o arquivo CSV referente à Inadimplência de Pessoas Jurídicas com ponto e vírgula como delimitador
inadimplencia_pj = pd.read_csv('estoque_inadimplencia_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
inadimplencia_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
inadimplencia_pj.index = pd.to_datetime(inadimplencia_pj.index)
# Adiciona Estoque_Inadimplencia_ ao início do nome das colunas
inadimplencia_pj.columns = ['Estoque_' + col for col in inadimplencia_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
inadimplencia_pj = inadimplencia_pj.iloc[:-2]
In [ ]:
# Converter colunas para float
inadimplencia_pj = inadimplencia_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(inadimplencia_pj.describe())
       Estoque_SFH  Estoque_Livre  Estoque_FGTS  Estoque_Comercial
count   109.000000     109.000000    109.000000         105.000000
mean      3.364128       5.996789      1.470367           2.535238
std       3.205572       7.457258      0.882337           2.438189
min       0.060000       0.420000      0.120000           0.000000
25%       0.600000       1.450000      0.740000           0.260000
50%       2.070000       2.920000      1.320000           1.920000
75%       5.350000       9.430000      2.130000           4.140000
max      11.720000      40.290000      4.390000           9.690000
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_', '') for coluna in inadimplencia_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))

for i, column in enumerate(inadimplencia_pj.columns):
    inadimplencia_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Inadimplência \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = inadimplencia_pj.columns.str.replace('Estoque_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(inadimplencia_pj.columns):
    plt.plot(inadimplencia_pj.index, inadimplencia_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Inadimplência - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Inadimplência em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Ativos Problemáticos PJ¶

Em bilhões de R$

In [ ]:
# Ler o arquivo CSV referente aos Ativos Problemáticos de Pessoas Jurídicas com ponto e vírgula como delimitador
ativos_problematicos_pj = pd.read_csv('estoque_ativos_problematicos_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
ativos_problematicos_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
ativos_problematicos_pj.index = pd.to_datetime(ativos_problematicos_pj.index)
# Adiciona Estoque_Ativos_Problematicos_ ao início do nome das colunas
ativos_problematicos_pj.columns = ['Estoque_AP_' + col for col in ativos_problematicos_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
ativos_problematicos_pj = ativos_problematicos_pj.iloc[:-2]
In [ ]:
# Converter colunas para float
ativos_problematicos_pj = ativos_problematicos_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(ativos_problematicos_pj.describe())
       Estoque_AP_FGTS  Estoque_AP_SFH  Estoque_AP_Comercial  Estoque_AP_Livre
count              0.0      109.000000            109.000000        109.000000
mean               NaN        1.224035              1.485780          3.056549
std                NaN        0.840675              1.224140          1.868412
min                NaN        0.168163              0.002799          0.159882
25%                NaN        0.401197              0.596731          1.059223
50%                NaN        1.271253              1.224052          3.595104
75%                NaN        1.877639              2.341957          4.736214
max                NaN        2.667923              4.043584          5.789070
In [ ]:
# Eliminar coluna Estoque_AP_FGTS
ativos_problematicos_pj.drop('Estoque_AP_FGTS', axis=1, inplace=True)
In [ ]:
import matplotlib.pyplot as plt

categorias = [coluna.replace('Estoque_AP_', '') for coluna in ativos_problematicos_pj.columns]


fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

for i, column in enumerate(ativos_problematicos_pj.columns):
    ativos_problematicos_pj.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Estoque - Ativos Problemáticos \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(12, 6))

rotulos_series = ativos_problematicos_pj.columns.str.replace('Estoque_AP_', '')

# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(ativos_problematicos_pj.columns):
    plt.plot(ativos_problematicos_pj.index, ativos_problematicos_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])

plt.title('Tendência Temporal Estoque \n Ativos Problemáticos - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Ativos Problemáticos em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14) 
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
No description has been provided for this image

Estoque PJ¶

In [ ]:
# Concatena os DataFrames carteira_credito_pj, indexadores_pj, risco_da_operacao_pj, inadimplencia_pj e ativos_problematicos_pj ao longo do eixo das colunas (axis=1)
estoque_pj = pd.concat([carteira_credito_pj, estoque_indexadores_pf,risco_da_operacao_pj, inadimplencia_pj, ativos_problematicos_pj], axis=1)
# Adiciona PJ ao início do nome das colunas para sinalizar Pessoa Jurídica
estoque_pj.columns = estoque_pj.columns + '_PJ'

Estoque PF + Estoque PJ¶

In [ ]:
# Merge dos DataFrames estoque_pf e estoque_pj 
estoque = pd.merge(estoque_pf, estoque_pj, how='inner', on='DateTime')
# Converter índice para datetime
estoque.index = pd.to_datetime(estoque.index)
# Imprime as informações do DataFrame
print(estoque.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30
Data columns (total 51 columns):
 #   Column                           Non-Null Count  Dtype  
---  ------                           --------------  -----  
 0   Estoque_Carteira_Comercial_PF    109 non-null    float64
 1   Estoque_Carteira_Home Equity_PF  109 non-null    float64
 2   Estoque_Carteira_Livre_PF        109 non-null    float64
 3   Estoque_Carteira_FGTS_PF         109 non-null    float64
 4   Estoque_Carteira_SFH_PF          109 non-null    float64
 5   Estoque_Prefixado_PF             109 non-null    float64
 6   Estoque_IPCA_PF                  94 non-null     float64
 7   Estoque_Outros_PF                109 non-null    float64
 8   Estoque_TR_PF                    109 non-null    float64
 9   Estoque_Risco_AA_PF              109 non-null    float64
 10  Estoque_Risco_A_PF               109 non-null    float64
 11  Estoque_Risco_B_PF               109 non-null    float64
 12  Estoque_Risco_C_PF               109 non-null    float64
 13  Estoque_Risco_D ou mais_PF       109 non-null    float64
 14  Estoque_Home Equity_PF           109 non-null    float64
 15  Estoque_SFH_PF                   0 non-null      float64
 16  Estoque_Livre_PF                 109 non-null    float64
 17  Estoque_FGTS_PF                  109 non-null    float64
 18  Estoque_Comercial_PF             109 non-null    float64
 19  Estoque_AP_Comercial_PF          0 non-null      float64
 20  Estoque_AP_Home Equity_PF        109 non-null    float64
 21  Estoque_AP_Livre_PF              109 non-null    float64
 22  Estoque_AP_SFH_PF                109 non-null    float64
 23  Estoque_AP_FGTS_PF               109 non-null    float64
 24  Estoque_VPP_Home Equity_PF       86 non-null     float64
 25  Estoque_VPP_SFH_PF               86 non-null     float64
 26  Estoque_VPP_Livre_PF             86 non-null     float64
 27  Estoque_VPP_FGTS_PF              86 non-null     float64
 28  Estoque_VPP_Comercial_PF         86 non-null     float64
 29  Estoque_Carteira_Home Equity_PJ  0 non-null      float64
 30  Estoque_Carteira_FGTS_PJ         109 non-null    float64
 31  Estoque_Carteira_Comercial_PJ    109 non-null    float64
 32  Estoque_Carteira_Livre_PJ        109 non-null    float64
 33  Estoque_Carteira_SFH_PJ          109 non-null    float64
 34  Estoque_Prefixado_PJ             109 non-null    float64
 35  Estoque_IPCA_PJ                  94 non-null     float64
 36  Estoque_Outros_PJ                109 non-null    float64
 37  Estoque_TR_PJ                    109 non-null    float64
 38  Estoque_Risco_AA_PJ              109 non-null    float64
 39  Estoque_Risco_A_PJ               109 non-null    float64
 40  Estoque_Risco_B_PJ               109 non-null    float64
 41  Estoque_Risco_C_PJ               109 non-null    float64
 42  Estoque_Risco_D ou mais_PJ       109 non-null    float64
 43  Estoque_SFH_PJ                   109 non-null    float64
 44  Estoque_Livre_PJ                 109 non-null    float64
 45  Estoque_FGTS_PJ                  109 non-null    float64
 46  Estoque_Comercial_PJ             105 non-null    float64
 47  Estoque_AP_FGTS_PJ               0 non-null      float64
 48  Estoque_AP_SFH_PJ                109 non-null    float64
 49  Estoque_AP_Comercial_PJ          109 non-null    float64
 50  Estoque_AP_Livre_PJ              109 non-null    float64
dtypes: float64(51)
memory usage: 44.3 KB
None
In [ ]:
# Imprime as primeiras linhas do DataFrame
print(estoque.head())
            Estoque_Carteira_Comercial_PF  Estoque_Carteira_Home Equity_PF  \
DateTime                                                                     
2014-04-30                       0.561784                        10.320047   
2014-05-31                       0.600306                        10.435072   
2014-06-30                       0.637257                        11.825104   
2014-07-31                       0.683327                        11.876517   
2014-08-31                       0.730228                        11.899535   

            Estoque_Carteira_Livre_PF  Estoque_Carteira_FGTS_PF  \
DateTime                                                          
2014-04-30                  57.276878                122.111077   
2014-05-31                  58.900783                124.038891   
2014-06-30                  60.223755                126.202763   
2014-07-31                  61.598601                136.546497   
2014-08-31                  63.060569                139.276953   

            Estoque_Carteira_SFH_PF  Estoque_Prefixado_PF  Estoque_IPCA_PF  \
DateTime                                                                     
2014-04-30               180.260926              4.140248              NaN   
2014-05-31               184.983631              4.120013              NaN   
2014-06-30               189.154130              5.331555              NaN   
2014-07-31               185.466386              5.315693              NaN   
2014-08-31               189.323693              5.260145              NaN   

            Estoque_Outros_PF  Estoque_TR_PF  Estoque_Risco_AA_PF  ...  \
DateTime                                                           ...   
2014-04-30           0.829092     365.561372                48.05  ...   
2014-05-31           0.880421     373.958250                46.86  ...   
2014-06-30           0.934741     381.776713                45.70  ...   
2014-07-31           0.947161     389.908475                44.83  ...   
2014-08-31           0.931660     398.099174                47.63  ...   

            Estoque_Risco_C_PJ  Estoque_Risco_D ou mais_PJ  Estoque_SFH_PJ  \
DateTime                                                                     
2014-04-30                9.35                        1.43            0.28   
2014-05-31                9.02                        1.34            0.32   
2014-06-30                8.92                        1.30            0.23   
2014-07-31                8.74                        1.11            0.16   
2014-08-31                8.82                        1.06            0.17   

            Estoque_Livre_PJ  Estoque_FGTS_PJ  Estoque_Comercial_PJ  \
DateTime                                                              
2014-04-30              0.57             0.12                  0.01   
2014-05-31              0.58             0.50                  0.01   
2014-06-30              0.74             0.78                  0.01   
2014-07-31              0.56             0.69                   NaN   
2014-08-31              0.72             0.81                   NaN   

            Estoque_AP_FGTS_PJ  Estoque_AP_SFH_PJ  Estoque_AP_Comercial_PJ  \
DateTime                                                                     
2014-04-30                 NaN           0.288959                 0.058625   
2014-05-31                 NaN           0.303304                 0.054316   
2014-06-30                 NaN           0.262386                 0.044129   
2014-07-31                 NaN           0.243681                 0.044326   
2014-08-31                 NaN           0.249512                 0.041545   

            Estoque_AP_Livre_PJ  
DateTime                         
2014-04-30             0.159882  
2014-05-31             0.196617  
2014-06-30             0.230506  
2014-07-31             0.210054  
2014-08-31             0.266968  

[5 rows x 51 columns]

Índices¶

Imobiliário PIB¶

Porcentagem ao Mês

In [ ]:
# Ler o arquivo CSV referente ao Imobiliário PIB com ponto e vírgula como delimitador
imobiliario_pib = pd.read_csv('imobiliario_pib.csv', delimiter=';', skipinitialspace=True)
# Renomeia a coluna Unnamed: 1 para Imobiliario_PIB
imobiliario_pib['Imobiliario_PIB'] = imobiliario_pib['Unnamed: 1']
# Retira a coluna Unnamed: 1
imobiliario_pib = imobiliario_pib.drop(columns= ['Unnamed: 1'])
# Define DateTime como índice
imobiliario_pib.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
imobiliario_pib.index = pd.to_datetime(imobiliario_pib.index)
In [ ]:
# Converter colunas para float
imobiliario_pib = imobiliario_pib.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(imobiliario_pib.describe())
       Imobiliario_PIB
count       109.000000
mean          9.247615
std           0.487744
min           7.480000
25%           9.100000
50%           9.410000
75%           9.560000
max           9.820000
In [ ]:
plt.figure(figsize=(12, 6))

plt.plot(imobiliario_pib.index, imobiliario_pib['Imobiliario_PIB'], marker='o', linestyle='-', label = 'Imobiliário PIB')

plt.title('Tendência Temporal Imobiliário/PIB', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Porcentagem ao mês', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.show()
No description has been provided for this image

Índice Valores de Garantia¶

In [ ]:
# Ler o arquivo CSV referente ao Índice Valores de Garantia com ponto e vírgula como delimitador
ind_valores_garantia = pd.read_csv('ind_valores_garantia.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
ind_valores_garantia.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
ind_valores_garantia.index = pd.to_datetime(ind_valores_garantia.index)
# Cria uma nova coluna chamada "Indice_Valores_de_Garantia" e copia os valores da coluna "Unnamed: 1" para ela
ind_valores_garantia['Indice_Valores_de_Garantia'] = ind_valores_garantia['Unnamed: 1']
# Retira a coluna Unnamed: 1
ind_valores_garantia = ind_valores_garantia.drop(columns=['Unnamed: 1'])
In [ ]:
# Converter colunas para float
ind_valores_garantia = ind_valores_garantia.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(ind_valores_garantia.describe())
       Indice_Valores_de_Garantia
count                  109.000000
mean                   567.160367
std                     46.654058
min                    520.780000
25%                    529.770000
50%                    547.030000
75%                    610.300000
max                    648.120000
In [ ]:
plt.figure(figsize=(12, 6))

plt.plot(ind_valores_garantia.index, ind_valores_garantia['Indice_Valores_de_Garantia'], marker='o', linestyle='-', label = 'Índice Valores de Garantia')

plt.title('Tendência Temporal Índice Valores de Garantia', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Índice', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.show()
No description has been provided for this image

Mediana Valores de Garantia¶

Em milhares de R$

In [ ]:
# Ler o arquivo CSV referente à Mediana Valores de Garantia com ponto e vírgula como delimitador
med_valores_garantia = pd.read_csv('mediana_valores_garantia.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
med_valores_garantia.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
med_valores_garantia.index = pd.to_datetime(med_valores_garantia.index)
# Cria uma nova coluna chamada "Mediana_Valores_de_Garantia" e copia os valores da coluna "Unnamed: 1" para ela
med_valores_garantia['Mediana_Valores_de_Garantia'] = med_valores_garantia['Unnamed: 1']
# Retira a coluna Unnamed: 1
med_valores_garantia = med_valores_garantia.drop(columns=['Unnamed: 1'])
# Converter colunas para float
med_valores_garantia = med_valores_garantia.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
In [ ]:
plt.figure(figsize=(12, 6))

plt.plot(med_valores_garantia.index, med_valores_garantia['Mediana_Valores_de_Garantia'], marker='o', linestyle='-', label = 'Mediana Valores de Garantia') 

plt.title('Tendência Temporal Mediana Valores de Garantia', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Em milhares de R$', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.show()
No description has been provided for this image

Índices¶

In [ ]:
# Merge dos DataFrames ind_valores_garantia e med_valores_garantia
valores_garantia = pd.merge(ind_valores_garantia, med_valores_garantia, how='inner', on='DateTime')
# Merge dos DataFrames valores_garantia e imobiliario_pib
indices = pd.merge(valores_garantia, imobiliario_pib, how='inner', on='DateTime')
# Converter índice para datetime
indices.index = pd.to_datetime(indices.index)
# Converter colunas para float
indices = indices.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(indices.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30
Data columns (total 3 columns):
 #   Column                       Non-Null Count  Dtype  
---  ------                       --------------  -----  
 0   Indice_Valores_de_Garantia   109 non-null    float64
 1   Mediana_Valores_de_Garantia  109 non-null    int64  
 2   Imobiliario_PIB              109 non-null    float64
dtypes: float64(2), int64(1)
memory usage: 3.4 KB
None
In [ ]:
# Imprime as primeiras linhas do DataFrame
print(indices.head())
            Imobiliario_PIB  Indice_Valores_de_Garantia  \
DateTime                                                  
2014-04-30             7.48                      537.93   
2014-05-31             7.60                      540.55   
2014-06-30             7.72                      542.87   
2014-07-31             7.84                      544.89   
2014-08-31             7.95                      546.62   

            Mediana_Valores_de_Garantia  
DateTime                                 
2014-04-30                       148008  
2014-05-31                       148539  
2014-06-30                       145000  
2014-07-31                       145000  
2014-08-31                       145000  
In [ ]:
# Imprime as últimas linhas do DataFrame
print(indices.tail())
            Imobiliario_PIB  Indice_Valores_de_Garantia  \
DateTime                                                  
2022-12-31             9.74                      647.63   
2023-01-31             9.74                      647.49   
2023-02-28             9.75                      647.33   
2023-03-31             9.79                      647.16   
2023-04-30             9.82                      646.98   

            Mediana_Valores_de_Garantia  
DateTime                                 
2022-12-31                       225000  
2023-01-31                       230000  
2023-02-28                       230000  
2023-03-31                       240000  
2023-04-30                       235000  
In [ ]:
indices.describe()
Out[ ]:
Imobiliario_PIB Indice_Valores_de_Garantia Mediana_Valores_de_Garantia
count 109.000000 109.000000 109.000000
mean 9.247615 567.160367 178479.174312
std 0.487744 46.654058 30849.423003
min 7.480000 520.780000 145000.000000
25% 9.100000 529.770000 155000.000000
50% 9.410000 547.030000 165000.000000
75% 9.560000 610.300000 210000.000000
max 9.820000 648.120000 250000.000000
In [ ]:
estatisticas_indices = indices.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_indices)
                              Imobiliario_PIB  Indice_Valores_de_Garantia
Média                                9.247615                  567.160367
Mediana                              9.410000                  547.030000
Moda                                 9.470000                  647.910000
Desvio Padrão (populacional)         0.485502                   46.439556
Desvio Padrão (amostral)             0.487744                   46.654058
Variância (populacional)             0.235712                 2156.632354
Variância (amostral)                 0.237894                 2176.601172
Coeficiente de Variação              5.274269                    8.225902
In [ ]:
import matplotlib.pyplot as plt

categorias = ['Imobiliário PIB', 'Índice Valores de Garantia', 'Mediana Valores de Garantia']

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

for i, column in enumerate(indices.columns):
    indices.boxplot(column=column, ax=axes[i], grid=False)
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Defina as categorias como título de cada boxplot
    axes[i].set_title(categorias[i], fontsize=14)
    
    # Remova o eixo x (legenda na parte inferior)
    axes[i].xaxis.set_ticks([])

# Adicione o título geral
plt.suptitle("Índices", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]:
import seaborn as sns

correlacao = sns.heatmap(indices.corr(), annot=True, cmap='Reds')
correlacao.set_title('Correlação entre os Índices\n', fontsize=16, fontweight='bold')

# Definir os rótulos dos eixos x e y usando as categorias
categorias = indices.columns.str.replace('_', ' ')
correlacao.set_xticklabels(categorias, rotation=45)
correlacao.set_yticklabels(categorias, rotation=0)

plt.show()
No description has been provided for this image

Dataframe Completo¶

In [ ]:
# Concatena os DataFrames recursos, direcionamento, contabil, credito, estoque e indices ao longo do eixo das colunas (axis=1)
df = pd.concat([recursos, direcionamento, contabil, credito, estoque,  indices], axis = 1)
# Imprime as informações do DataFrame
print(df.info())
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30
Freq: M
Data columns (total 98 columns):
 #   Column                            Non-Null Count  Dtype  
---  ------                            --------------  -----  
 0   SBPE                              109 non-null    float64
 1   LCI                               109 non-null    float64
 2   CRI                               109 non-null    float64
 3   LIG                               54 non-null     float64
 4   LH                                102 non-null    float64
 5   Direcionamento_Aplicacao          109 non-null    float64
 6   Direcionamento_Aquisicao          109 non-null    float64
 7   Direcionamento_Construcao         109 non-null    float64
 8   Direcionamento_Reforma_Ampliacao  52 non-null     float64
 9   Financiamento_Comercial           81 non-null     float64
 10  Financiamento_Residencial         81 non-null     float64
 11  BNDU_Imobiliário                  81 non-null     float64
 12  VC_Comercial_PF                   0 non-null      float64
 13  VC_Home Equity_PF                 0 non-null      float64
 14  VC_Livre_PF                       0 non-null      float64
 15  VC_FGTS_PF                        0 non-null      float64
 16  VC_SFH_PF                         0 non-null      float64
 17  Credito_Prefixado_PF              0 non-null      float64
 18  Credito_IPCA_PF                   0 non-null      float64
 19  Credito_Outros_PF                 0 non-null      float64
 20  Credito_TR_PF                     0 non-null      float64
 21  Credito_Taxa_SFH_PF               109 non-null    float64
 22  Credito_Taxa_FGTS_PF              109 non-null    float64
 23  Credito_Taxa_Livre_PF             109 non-null    float64
 24  Credito_Taxa_Comercial_PF         109 non-null    float64
 25  Credito_Taxa_Home Equity_PF       109 non-null    float64
 26  Credito_LTV_SFH_PF                109 non-null    float64
 27  Credito_LTV_FGTS_PF               109 non-null    float64
 28  Credito_LTV_Livre_PF              109 non-null    float64
 29  Credito_LTV_Comercial_PF          109 non-null    float64
 30  Credito_LTV_Home Equity_PF        109 non-null    float64
 31  VC_Comercial_PJ                   109 non-null    float64
 32  VC_FGTS_PJ                        109 non-null    float64
 33  VC_Livre_PJ                       109 non-null    float64
 34  VC_SFH_PJ                         109 non-null    float64
 35  Credito_IPCA_PJ                   8 non-null      float64
 36  Credito_Outros_PJ                 49 non-null     float64
 37  Credito_CDI_PJ                    53 non-null     float64
 38  Credito_Prefixado_PJ              95 non-null     float64
 39  Credito_TR_PJ                     109 non-null    float64
 40  Credito_SFH_PJ                    109 non-null    float64
 41  Credito_FGTS_PJ                   109 non-null    float64
 42  Credito_Livre_PJ                  109 non-null    float64
 43  Credito_Comercial_PJ              109 non-null    float64
 44  Estoque_Carteira_Comercial_PF     109 non-null    float64
 45  Estoque_Carteira_Home Equity_PF   109 non-null    float64
 46  Estoque_Carteira_Livre_PF         109 non-null    float64
 47  Estoque_Carteira_FGTS_PF          109 non-null    float64
 48  Estoque_Carteira_SFH_PF           109 non-null    float64
 49  Estoque_Prefixado_PF              109 non-null    float64
 50  Estoque_IPCA_PF                   94 non-null     float64
 51  Estoque_Outros_PF                 109 non-null    float64
 52  Estoque_TR_PF                     109 non-null    float64
 53  Estoque_Risco_AA_PF               109 non-null    float64
 54  Estoque_Risco_A_PF                109 non-null    float64
 55  Estoque_Risco_B_PF                109 non-null    float64
 56  Estoque_Risco_C_PF                109 non-null    float64
 57  Estoque_Risco_D ou mais_PF        109 non-null    float64
 58  Estoque_Home Equity_PF            109 non-null    float64
 59  Estoque_SFH_PF                    0 non-null      float64
 60  Estoque_Livre_PF                  109 non-null    float64
 61  Estoque_FGTS_PF                   109 non-null    float64
 62  Estoque_Comercial_PF              109 non-null    float64
 63  Estoque_AP_Comercial_PF           0 non-null      float64
 64  Estoque_AP_Home Equity_PF         109 non-null    float64
 65  Estoque_AP_Livre_PF               109 non-null    float64
 66  Estoque_AP_SFH_PF                 109 non-null    float64
 67  Estoque_AP_FGTS_PF                109 non-null    float64
 68  Estoque_VPP_Home Equity_PF        86 non-null     float64
 69  Estoque_VPP_SFH_PF                86 non-null     float64
 70  Estoque_VPP_Livre_PF              86 non-null     float64
 71  Estoque_VPP_FGTS_PF               86 non-null     float64
 72  Estoque_VPP_Comercial_PF          86 non-null     float64
 73  Estoque_Carteira_Home Equity_PJ   0 non-null      float64
 74  Estoque_Carteira_FGTS_PJ          109 non-null    float64
 75  Estoque_Carteira_Comercial_PJ     109 non-null    float64
 76  Estoque_Carteira_Livre_PJ         109 non-null    float64
 77  Estoque_Carteira_SFH_PJ           109 non-null    float64
 78  Estoque_Prefixado_PJ              109 non-null    float64
 79  Estoque_IPCA_PJ                   94 non-null     float64
 80  Estoque_Outros_PJ                 109 non-null    float64
 81  Estoque_TR_PJ                     109 non-null    float64
 82  Estoque_Risco_AA_PJ               109 non-null    float64
 83  Estoque_Risco_A_PJ                109 non-null    float64
 84  Estoque_Risco_B_PJ                109 non-null    float64
 85  Estoque_Risco_C_PJ                109 non-null    float64
 86  Estoque_Risco_D ou mais_PJ        109 non-null    float64
 87  Estoque_SFH_PJ                    109 non-null    float64
 88  Estoque_Livre_PJ                  109 non-null    float64
 89  Estoque_FGTS_PJ                   109 non-null    float64
 90  Estoque_Comercial_PJ              105 non-null    float64
 91  Estoque_AP_FGTS_PJ                0 non-null      float64
 92  Estoque_AP_SFH_PJ                 109 non-null    float64
 93  Estoque_AP_Comercial_PJ           109 non-null    float64
 94  Estoque_AP_Livre_PJ               109 non-null    float64
 95  Indice_Valores_de_Garantia        109 non-null    float64
 96  Mediana_Valores_de_Garantia       109 non-null    int64  
 97  Imobiliario_PIB                   109 non-null    float64
dtypes: float64(97), int64(1)
memory usage: 84.3 KB
None
In [ ]:
# Eliminar Espaço no nome das colunas
for col in df.columns:
    if 'Home Equity' in col:
        novo_nome_coluna = col.replace(' ', '_')  # Substitui espaços por sublinhados
        df = df.rename(columns={col: novo_nome_coluna})
# print(df.columns)
In [ ]:
df.describe()
Out[ ]:
SBPE LCI CRI LIG LH Direcionamento_Aplicacao Direcionamento_Aquisicao Direcionamento_Construcao Direcionamento_Reforma_Ampliacao Financiamento_Comercial ... Estoque_Livre_PJ Estoque_FGTS_PJ Estoque_Comercial_PJ Estoque_AP_FGTS_PJ Estoque_AP_SFH_PJ Estoque_AP_Comercial_PJ Estoque_AP_Livre_PJ Imobiliario_PIB Indice_Valores_de_Garantia Mediana_Valores_de_Garantia
count 109.000000 109.000000 109.000000 54.000000 102.000000 109.000000 109.000000 109.000000 52.000000 109.000000 ... 109.000000 109.000000 105.000000 0.0 109.000000 109.000000 109.000000 109.000000 109.000000 109.000000
mean 622.113425 164.422881 79.217958 34.803963 0.958290 464.025662 533.736825 42.947682 564.759796 1.879770 ... 5.996789 1.470367 2.535238 NaN 1.224035 1.485780 3.056549 9.247615 567.160367 178479.174312
std 114.726873 34.003273 25.957792 29.890667 0.351409 81.798012 168.306809 17.347505 41.636823 0.469749 ... 7.457258 0.882337 2.438189 NaN 0.840675 1.224140 1.868412 0.487744 46.654058 30849.423003
min 480.464917 114.102520 40.795547 0.177202 0.018120 325.585144 270.757417 19.255190 512.119403 1.254153 ... 0.420000 0.120000 0.000000 NaN 0.168163 0.002799 0.159882 7.480000 520.780000 145000.000000
25% 510.620427 137.750671 65.419271 11.308063 0.925513 387.192224 393.501215 29.165905 528.116359 1.426575 ... 1.450000 0.740000 0.260000 NaN 0.401197 0.596731 1.059223 9.100000 529.770000 155000.000000
50% 599.508867 165.544869 73.005338 21.926618 1.061776 452.574064 485.512991 36.337262 555.566737 1.818669 ... 2.920000 1.320000 1.920000 NaN 1.271253 1.224052 3.595104 9.410000 547.030000 165000.000000
75% 757.535898 183.879294 81.616554 56.932670 1.116405 516.834464 652.302756 53.741841 600.540329 2.262857 ... 9.430000 2.130000 4.140000 NaN 1.877639 2.341957 4.736214 9.560000 610.300000 210000.000000
max 801.437986 284.425993 151.744832 97.786173 1.494045 618.514193 876.639352 82.898815 645.239690 2.725520 ... 40.290000 4.390000 9.690000 NaN 2.667923 4.043584 5.789070 9.820000 648.120000 250000.000000

8 rows × 99 columns

In [ ]:
# Salvando o DataFrame em um arquivo Excel
df.to_excel('inf_mercado_imobiliario.xlsx', index=False)
In [ ]:
# Salvando o DataFrame em um arquivo CSV
df.to_csv('inf_mercado_imobiliario.csv', sep=';', index=False)

Dicionário de Dados¶

In [ ]:
dicionario_imobiliario  = {
    'SBPE': 'Sistema Brasileiro de Poupança e Empréstimo',
    'LCI': 'Letra de Crédito Imobiliário',
    'CRI': 'Certificado de Recebíveis Imobiliários',
    'LIG': 'Letra Imobiliária Garantida',
    'LH': 'Letra Hipotecária',
    
    'Direcionamento_Aplicacao': 'Aplicações em créditos imobiliários - Aplicação',
    'Direcionamento_Aquisicao': 'Aplicações em créditos imobiliários - Aquisição',
    'Direcionamento_Construcao': 'Aplicações em créditos imobiliários - Construção',
    'Direcionamento_Reforma_Ampliacao': 'Aplicações em créditos imobiliários - Reforma/Ampliação',

    'Financiamento_Comercial': 'Financiamento Comercial',
    'Financiamento_Residencial': 'Financiamento Residencial',
    'BNDU_Imobiliário': 'Bens não de uso próprio (BNDU) Imobiliário',

    'Imobiliario_PIB': 'Imobiliário/PIB',
    'Indice_Valores_de_Garantia': 'Índice de Valores de Garantia',
    'Mediana_Valores_de_Garantia': 'Mediana dos Valores de Garantia',

    'VC_Comercial_PJ': 'Valor Contratado - Comercial (Pessoa Jurídica)',
    'VC_FGTS_PJ': 'Valor Contratado - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Jurídica)',
    'VC_Livre_PJ': 'Valor Contratado - Livre (Pessoa Jurídica)',
    'VC_SFH_PJ': 'Valor Contratado - SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
    'Credito_IPCA_PJ': 'Crédito - IPCA (Pessoa Jurídica)',
    'Credito_Outros_PJ': 'Crédito - Outros (Pessoa Jurídica)',
    'Credito_CDI_PJ': 'Crédito - CDI (Pessoa Jurídica)',
    'Credito_Prefixado_PJ': 'Crédito - Prefixado (Pessoa Jurídica)',
    'Credito_TR_PJ': 'Crédito - Taxa Referencial (TR) (Pessoa Jurídica)',
    'Credito_SFH_PJ': 'Crédito - SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
    'Credito_FGTS_PJ': 'Crédito - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Jurídica)',
    'Credito_Livre_PJ': 'Crédito - Livre (Pessoa Jurídica)',
    'Credito_Comercial_PJ': 'Crédito - Comercial (Pessoa Jurídica)',

    'VC_Comercial_PF': 'Valor Contratado - Comercial (Pessoa Física)',
    'VC_Home_Equity_PF': 'Valor Contratado - Home Equity (Pessoa Física)',
    'VC_Livre_PF': 'Valor Contratado - Livre (Pessoa Física)',
    'VC_FGTS_PF': 'Valor Contratado - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
    'VC_SFH_PF': 'Valor Contratado - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
    'Credito_Prefixado_PF': 'Crédito - Prefixado (Pessoa Física)',
    'Credito_IPCA_PF': 'Crédito - IPCA (Pessoa Física)',
    'Credito_Outros_PF': 'Crédito - Outros (Pessoa Física)',
    'Credito_TR_PF': 'Crédito - Taxa Referencial (TR) (Pessoa Física)',
    'Credito_Taxa_SFH_PF': 'Crédito - Taxa SFH (Pessoa Física)',
    'Credito_Taxa_FGTS_PF': 'Crédito - Taxa FGTS (Pessoa Física)',
    'Credito_Taxa_Livre_PF': 'Crédito - Taxa Livre (Pessoa Física)',
    'Credito_Taxa_Comercial_PF': 'Crédito - Taxa Comercial (Pessoa Física)',
    'Credito_Taxa_Home Equity_PF': 'Crédito - Taxa Home Equity (Pessoa Física)',
    'Credito_LTV_SFH_PF': 'Crédito - LTV SFH (Pessoa Física)',
    'Credito_LTV_FGTS_PF': 'Crédito - LTV FGTS (Pessoa Física)',
    'Credito_LTV_Livre_PF': 'Crédito - LTV Livre (Pessoa Física)',
    'Credito_LTV_Comercial_PF': 'Crédito - LTV Comercial (Pessoa Física)',
    'Credito_LTV_Home Equity_PF': 'Crédito - LTV Home Equity (Pessoa Física)',

    'Estoque_Carteira_Comercial_PF': 'Estoque - Carteira Comercial (Pessoa Física)',
    'Estoque_Carteira_Home_Equity_PF': 'Estoque - Carteira Home Equity (Pessoa Física)',
    'Estoque_Carteira_Livre_PF': 'Estoque - Carteira Livre (Pessoa Física)',
    'Estoque_Carteira_FGTS_PF': 'Estoque - Carteira FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
    'Estoque_Carteira_SFH_PF': 'Estoque - Carteira SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
    'Credito_Prefixado_PF': 'Crédito - Prefixado (Pessoa Física)',
    'Credito_IPCA_PF': 'Crédito - IPCA (Pessoa Física)',
    'Credito_Outros_PF': 'Crédito - Outros (Pessoa Física)',
    'Credito_TR_PF': 'Crédito - Taxa Referencial (TR) (Pessoa Física)',
    'Estoque_Risco_AA_PF': 'Estoque - Risco de Crédito AA (Pessoa Física)',
    'Estoque_Risco_A_PF': 'Estoque - Risco de Crédito A (Pessoa Física)',
    'Estoque_Risco_B_PF': 'Estoque - Risco de Crédito B (Pessoa Física)',
    'Estoque_Risco_C_PF': 'Estoque - Risco de Crédito C (Pessoa Física)',
    'Estoque_Risco_D ou mais_PF': 'Estoque - Risco de Crédito D ou mais (Pessoa Física)',
    'Estoque_Home_Equity_PF': 'Estoque - Home Equity (Pessoa Física)',
    'Estoque_SFH_PF': 'Estoque - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
    'Estoque_Livre_PF': 'Estoque - Livre (Pessoa Física)',
    'Estoque_FGTS_PF': 'Estoque - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
    'Estoque_Comercial_PF': 'Estoque - Comercial (Pessoa Física)',
    'Estoque_AP_Comercial_PF': 'Estoque - Ativos Problemáticos - Comercial (Pessoa Física)',
    'Estoque_AP_Home_Equity_PF': 'Estoque - Ativos Problemáticos - Home Equity (Pessoa Física)',
    'Estoque_AP_Livre_PF': 'Estoque - Ativos Problemáticos - Livre (Pessoa Física)',
    'Estoque_AP_SFH_PF': 'Estoque - Ativos Problemáticos - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
    'Estoque_AP_FGTS_PF': 'Estoque - Ativos Problemáticos - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
    'Estoque_VPP_Home_Equity_PF': 'Estoque - Valor da Próxima Parcela - Home Equity (Pessoa Física)',
    'Estoque_VPP_SFH_PF': 'Estoque - Valor da Próxima Parcela - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
    'Estoque_VPP_Livre_PF': 'Estoque - Valor da Próxima Parcela - Livre (Pessoa Física)',
    'Estoque_VPP_FGTS_PF': 'Estoque - Valor da Próxima Parcela - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
    'Estoque_VPP_Comercial_PF': 'Estoque - Valor da Próxima Parcela - Comercial (Pessoa Física)'
}

# Converter o dicionário em um DataFrame
dicionario_imobiliario = pd.DataFrame(list(dicionario_imobiliario.items()), columns=['Índice', 'Descrição'])

# Exibir o DataFrame
print(dicionario_imobiliario)
                        Índice  \
0                         SBPE   
1                          LCI   
2                          CRI   
3                          LIG   
4                           LH   
..                         ...   
67  Estoque_VPP_Home_Equity_PF   
68          Estoque_VPP_SFH_PF   
69        Estoque_VPP_Livre_PF   
70         Estoque_VPP_FGTS_PF   
71    Estoque_VPP_Comercial_PF   

                                            Descrição  
0         Sistema Brasileiro de Poupança e Empréstimo  
1                        Letra de Crédito Imobiliário  
2              Certificado de Recebíveis Imobiliários  
3                         Letra Imobiliária Garantida  
4                                   Letra Hipotecária  
..                                                ...  
67  Estoque - Valor da Próxima Parcela - Home Equi...  
68  Estoque - Valor da Próxima Parcela - SFH (Sist...  
69  Estoque - Valor da Próxima Parcela - Livre (Pe...  
70  Estoque - Valor da Próxima Parcela - FGTS (Fun...  
71  Estoque - Valor da Próxima Parcela - Comercial...  

[72 rows x 2 columns]
In [ ]:
# Salvar o DataFrame no arquivo Excel
dicionario_imobiliario.to_excel('dicionario_imobiliario.xlsx', index=False)